package com.qinglei.recoup.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qinglei.recoup.system.domain.EventProc;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qinglei.recoup.system.domain.EventStatisticsBO;
import com.qinglei.recoup.system.pojo.AlarmEventItemVO;
import com.qinglei.recoup.system.pojo.BatchProcEventParam;
import com.qinglei.recoup.system.pojo.EventItemVO;
import com.qinglei.recoup.system.pojo.EventProcParam;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @author syp
 */
public interface EventProcService extends IService<EventProc> {
    /**
     * 获取事件统计数据
     * @param userId
     * @param day
     * @return
     */
    EventStatisticsBO getEventProcDataByDay(Long userId, LocalDate day);

    /**
     * 获取用户今天漏掉异常
     * @param userId
     * @param today
     * @return
     */
    Integer getMissAbnormalCnt(Long userId, LocalDate today);

    /**
     * 获取用户历史漏掉异常
     * @param userId
     * @param startDay
     * @param yesterday
     * @return
     */
    Integer getMissAbnormalHistory(Long userId, LocalDate startDay, LocalDate yesterday);

    /**
     * 获取指定床位漏掉的任务数目（7天内）
     * @param bedId
     * @return
     */
    Integer getMissedEventNumByBed(Integer bedId);

    /**
     * 获取指定床位漏掉的任务列表（7天内）
     * @param bedId
     * @return
     */
    List<EventItemVO> getMissedEventListByBed(Integer bedId);

    /**
     * 处理床位报警（2.0新增）
     * @param param
     */
    boolean procAlarmEvent(EventProcParam param);

    /**
     * 批量处理床位遗漏事件（2.0新增）
     * @param param
     */
    void procMissedEvent(BatchProcEventParam param);

    /**
     * 记录遗漏事件（2.0新增）
     * @param eventId
     */
    void saveMissedEvent(Long eventId);

    /**
     * 将正在发生的事件处理成漏掉的事件
     * @param bedId
     */
    void procEvent2MissedStatus4Hmp(Integer bedId);

   void saveNurseMissedLog(Integer bedId, Long eventId, Integer tenantId);

    /**
     * 获取报警数量
     *
     * @param bedId
     * @return
     */
   Integer getAlarmEventCount(Integer bedId);


    /**
     * 获取报警信息列表
     *
     * @param bedId
     * @param startTime
     * @param endTime
     * @param pageParam
     * @return
     */
    IPage<AlarmEventItemVO> pageAlarmEventList(Integer bedId, LocalDateTime startTime, LocalDateTime endTime, IPage pageParam);

    /**
     * 将报警时间置为完成
     *
     * @param userId
     * @param tenantId
     * @param bedId
     * @param startTime
     * @param endTime
     * @return
     */
    Boolean finishAlarmEvent(Long userId, Integer tenantId, Integer bedId, LocalDateTime startTime, LocalDateTime endTime);
}
